我是如何通过Web爬虫找工作的
作者: Zhia Hwa Chong
编译: Mika
本文为 CDA 数据分析师原创作品;
前言
当时我刚从大学毕业,需要找一份工作。那时我不太喜欢社交,因此我决定以我所知道的最佳方法来找工作,即开发一个应用程序,这篇文章就介绍了我是如何做到的。
Craigslist
我打算通过开发应用程序,帮我在Craigslist在找寻软件工程师的相关工作。
Craigslist是美国著名的大型免费分类广告网站,你可以在上面找到东西出售,服务信息,社区帖子等内容。
Craigslist
那时我还从未开发过成熟的应用程序。我在大学里做的学术项目主要是:构建和解析二叉树,计算机图形和简单的语言处理模型等等。
换句话说,我是妥妥的小白。
Python是当下非常热门的新兴编程语言,我不太会Python,但我打算试着学一学。因此,我打算结合这两者,用Python开发一个小型的应用程序。
我是怎么做的
大学毕业后,我哥哥送了我一台明基笔记本电脑,我就用这台电脑进行开发。
这台电脑并不具备最好的开发环境,我用的是Python 2.4和Sublime的旧版本,但从零开始开发应用的过程确实令人振奋。
我不知道我需要做些什么,我在不断地尝试,看会遇到哪些问题。我的第一个挑战就是如何轻松访问Craigslist的数据。
首先,我查看Craigslist是否有公开的REST API,但令我沮丧的是,并没有。但我找到了不错的替代品。
Craigslist有公开供个人使用的RSS feed。RSS feed是网站发送更新的计算机可读摘要。RSS feed能让我获取发布的工作列表,这非常适合我的需求。
RSS feed大概是这样
接下来,我需要阅读这些RSS feed。我不想手动浏览RSS feed,这很耗时,与一页页浏览Craigslist没有什么不同。
这时我开始意识到谷歌的作用。有一个说法是,软件工程师的大部分时间都用在谷歌搜索上,我认为这是有一定道理的。
经过谷歌搜索后,我在StackOverflow上找到了这篇有用的帖子,上面描述了如何搜索Craiglist 的RSS feed,这是Craigslist免费提供的一种过滤功能。我所要做的就是通过特定的参数对感兴趣的关键字进行查询。
相关帖子:
https://stackoverflow.com/questions/10353021/is-there-a-developers-api-for-craigslist-org
我主要在找西雅图的软件相关工作。因此,我通过特定的URL来查找西雅图包含关键字"software"的列表。
https://seattle.craigslist.org/search/sss?format=rss&query=software
看,效果很不错。
西雅图的RSS feed中标题中包含"software"的内容
遇到的问题
我不认为我的方法能行得通。
首先,列表的数量有限。我的数据未包含西雅图的所有发布的职位,返回的结果仅是一部分。我希望尽可能扩大搜索,因此我需要获得所有可用的工作列表。
其次,我意识到RSS feed 不包含任何联系方式,这太可惜了。我能找到职位发布信息,但除非我手动过滤这些列表,否则我无法联系到这些职位。
Craigslist回复链接的截图
继续迭代
经过第一次失败的尝试,我发现Craigslist有我可以进行爬取的RSS feed,每个帖子都指向实际发布的链接。
如果我可以访问实际的帖子,那么也许我能从中爬到邮箱地址?这意味着我需要找到一种方法来从原始帖子中获取邮件地址。
再次,我在谷歌上搜索"解析网站的方法"。结果我发现了一个很酷的Python小工具,叫做Beautiful Soup。它能让你解析整个DOM树,并帮助你了解网页的结构。
我的需求很简单:需要一个易于使用的工具,能让我从网页收集数据。
BeautifulSoup符合这两点,这是我并不是花更多时间去挑选工具,而是选择了这个工具继续开始尝试。
这里也有类似的工具可供选择。
https://www.quora.com/What-are-some-good-Python-libraries-for-parsing-HTML-other-than-Beautiful-Soup
BeautifulSoup的主页
有了这个新工具,我的工作流程就搞定了。
我的工作流程
我准备进行下一个任务:从实际发布贴中爬取邮箱地址。
开源技术的好处在于,它们是免费的,而且性能强大。BeautifulSoup能让你在网页上搜索特定的HTML标记。Craigslist以这样的方式构建其列表,以便轻松找到邮箱地址。
之后就简单了,通过BeautifulSoup提供的内置功能,我就能简单地从Craigslist帖子获取邮箱地址。
整合起来
用了约1个小时,我就达到了预期目标。我开发了网络爬虫工具,这能够收集西雅图100英里范围内软件工程师相关工作的邮箱地址,并回复邮件。
代码截图
我在原始脚本之上添加了些附加组件,让爬取更为轻松。例如,我将结果保存到CSV和HTML页面中,以便我能快速进行解析。
当然还有一些不足:
无法记录已发送的邮件
无法防止重复发送邮件
有些邮件为了防止机器人发送,需要验证码才能显示
Craigslist不允许在其平台上进行爬虫,如果我经常运行脚本则会被禁止。(我试图切换VPN,但不管用)
仍然无法检索Craigslist上的所有帖子
最后这点让人郁闷,但我认为如果一篇招聘贴发布了一段时间,可能发布者已经没有再招人了,这样也是可以接受的。
整个过程感觉像是俄罗斯方块。我知道最终目标是什么,真正的挑战是将正确的部分组合在一起,从而实现最终目标。每一步都有不同的挑战,整个过程中我学到了很多新知识。
经验教训
这次经历让我大开眼界,我学到了更多互联网和Craigslist的工作原理,以及该如何运用各种不同的工具协同解决问题。
可改进的方面
当中有很多方面我能够进行改进:
我选择了一种不太熟悉的语言,这需要一个学习过程。不过还挺顺利,因为Python非常容易上手。我强烈建议编程初学者将Python作为第一选择。
过分依赖开源技术,开源软件也存在问题。我使用的一些库已不再处于活跃开发阶段,因此会遇到一些问题。例如无法导入库,库会莫名其妙地崩溃等。
自己完成一个项目很有趣,但也有压力,你需要很大的动力才能做出成果。我的这个项目很快很简单,但我也花了几周进行改进。随着项目的进行,我逐渐失去动力,找到工作后,我完全放弃了这个项目。
使用的资源和工具
The Hitchhiker’s Guide to Python
一本很棒的学习Python的书。
BeautifulSoup
我用来开发网络爬虫实用工具
https://www.crummy.com/software/BeautifulSoup/
Web Scraping with Python
如何使用Python进行Web抓取的使用指南。
Lean Startup
我从这本书中学习了如何快速进行原型设计。这里的很多想法适用于许多不同领域,也有助于我完成项目。
Evernote
我用Evernote写了这篇文章,强烈推荐。
MacBook Pro
这是我目前使用的笔记本电脑,与之前的明基相比,它更容易使用,但两者都适用于一般的编程工作。
更多精彩文章